﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using CRUD.InterfaceDAO;
using CapaNegocios;
using GestionadorBaseDatos;

namespace CapaGestion
{
    /// <summary>
    /// Gestiona las reglas de negocio para los mantenimientos de los pagos
    /// </summary>
    public class GestionarMantenimientoPago : IGestionMantenimientoPago
    {
       IDaoMantenimientoPago daoMantenimientoPago;
        IDaoPago daoPago;
        IDaoUsuario daoUsuario;
        IDaoFormaPago daoFormaPago;

        /// <summary>
        /// Metodo que permite obtener todos los mantenimientos de los pagos.
        /// </summary>
        /// <returns>
        /// Retorna una coleccion List que contiene objetos de tipo Mantenimiento Pago
        /// </returns>
        public List<MantenimientoPago> ObtenerMantenimientoPagos()
        {
            IList listaMantenPagos = daoMantenimientoPago.GetAll();

            List<MantenimientoPago> listaLlena = new List<MantenimientoPago>();

            foreach (MantenimientoPago mantenPago in listaMantenPagos)
            {
                mantenPago.FormaPagoMantenimiento = daoFormaPago.GetById(mantenPago.FormaPagoMantenimiento);
                mantenPago.UsuarioAsociado = daoUsuario.GetByNickname(mantenPago.UsuarioAsociado.Nickname);
                listaLlena.Add(mantenPago);
            }
            return listaLlena;
        }

        /// <summary>
        /// Metodo que permite insertar un nuevo mantenimiento de un pago.
        /// </summary>
        /// <param name="mantenPago">
        /// Este parametro es de tipo MantenimientoPago y es el mantenimiento que queremos insertar.
        /// </param>
        public void InsertarMantenimientoPago(MantenimientoPago mantenPago)
        {
            daoMantenimientoPago.Insert(mantenPago);
        }

        /// <summary>
        /// Metodo que permite obtener los mantenimientos de los pagos hechos por un usuario en especifico.
        /// </summary>
        /// <param name="usuario">
        /// Este parametro es un objeto de tipo Usuario y representa al usuario cuyos mantenimientos pagos
        /// queremos obtener
        /// </param>
        /// <returns>
        /// Retorna una coleccion List que contiene objetos de tipo MantenimientoPago.
        /// </returns>
        public List<MantenimientoPago> ObtenerMantenimientosPagoPorUsuario(Usuario usuario)
        {
            IList listaMantenPagos = daoMantenimientoPago.GetMantenimientosPagoByUsuario(usuario);

            List<MantenimientoPago> listaLlena = new List<MantenimientoPago>();

            foreach (MantenimientoPago mantenPago in listaMantenPagos)
            {
                mantenPago.UsuarioAsociado = daoUsuario.GetByNickname(mantenPago.UsuarioAsociado.Nickname);
                mantenPago.FormaPagoMantenimiento = daoFormaPago.GetById(mantenPago.FormaPagoMantenimiento);
                listaLlena.Add(mantenPago);
            }
            return listaLlena;
        }
        /*
         
        public IList<MantenimientoPago> ObtenerMantenimientosPagosPorUsuario(Usuario usuario)
        {
            IList listaMantenPagosPorUsuario = daoMantenimientoPago.GetMantenimientosPagoByUsuario(usuario);

            IList<MantenimientoPago> listaLlena = new IList<MantenimientoPago>();

            foreach (MantenimientoPago mantenimientoPago in listaMantenPagosPorUsuario)
            {
                mantenimientoPago.UsuarioAsociado = daoUsuario.GetByNickname(mantenimientoPago.UsuarioAsociado.Nickname);
                mantenimientoPago.FormaPagoMantenimiento = daoFormaPago.FormaPagoGetById(mantenimientoPago.FormaPagoMantenimiento.IdFormaPago);
                listaLlena.Add(mantenimientoPago);
            }
            return listaLlena;
        }*/
    }
}
